perm filename SC2XB[1,LCS] blob sn#607340 filedate 1981-08-20 generic text, type T, neo UTF8
101     N=INP(ML)   
        IZ=ML  
        ML=ML+1
        IF(N.EQ.IBLA)GO TO 101
        M=1    
        JA=-1  
C AT THIS POINT IT LOOKS FOR P=PARM, E=END, D=DUPL, C=CONTINUATION, R=RUN. 
C  ALSO N=NP(NUM. OF PARAMS.) 
        IF(N.EQ.IPP)GO TO 1   
        IF(N.EQ.IE)GO TO 2308 
        IF(N.NE.'R')GO TO 1101
        N=INP(ML)   
C   'RUN' MAY REPLACE 'END' FOR LAST INST.   
        IF(N.EQ.'U')CALL RUNIT
CC      M=1    
        LPAR=1 
C TYPE 'RD' (P100) FOR RANDOM DEVIATION, 'RR'(P1) FOR RANDOM RESTS.   
        IF(N.EQ.ID)LPAR=NUMP+1
1205    K=ML   
205     K=K+1  
        IJ=INP(K)   
        IF(IJ.EQ.IBLA)GO TO 205    
        IF(IJ.NE.IDOT.AND.IJ.NE.'-'.AND.
        1 IJ.NE.IPP.AND.(IJ.LT.'0'.OR.IJ.GT.'9'))CALL ERR(0)
C LOOK FOR ILLEGAL FORMAT WITH RR, RD, DF. (ACCEPTS NUM,DOT,Pn,MINUS) 
        GO TO 201   
C********* NEW   NP=NUM. OF PARAMS TO PRINTOUT    
1101    IF(N.NE.IEN)GO TO 2205
        N=INP(ML)   
        IF(N.NE.IPP)CALL ERR(0)    
        ML=ML+1
        CALL SCANR  
        NUMPAR(INSNUM)=VX1    
        GO TO 1299  
C********* NEW   NP=NUM. OF PARAMS TO PRINTOUT    
     
2205    IF(N.NE.ID)GO TO 303  
CC1101  IF(N.NE.ID)GO TO 303  
        IF(INP(ML).NE.IF)GO TO 7720
C NEXT FOR 'DF' DUTY FACTOR IN PLACE OF A Pn.  (TAKE OUT OLD DF STUFF LATER.)   
CC      ML=ML+1
C 'M' IS USED AFTER 897 INSTEAD OF 'ML' 
        LPAR=NUMP+2 
C USE P101 FOR DF.  
        GO TO 1205  
303     IF(N.NE.'C')CALL ERR(0)    
C NEXT FOR 'CONTINUATION'.  AUTOMATICALLY PUSHES UP PARAM NUMS.  
        IOFSET=IOFSET+1  
        LPAR=IOLDPR+IOFSET    
        TYPE 1201,IOFSET 
        IF(LPAR.GT.NUMP)CALL ERR(6)
2201    IF(INP(ML).EQ.IBLA)GO TO 3201   
C  TO MOVE POINTER AHEAD.  MUST HAVE BLANK AFTER 'C' OR 'CO' OR 'CONT', ETC.    
        ML=ML+1
        GO TO 2201  
3201    IZ=ML-1
        M=0    
        GO TO 201   
1201    FORMAT(' ↑Y↑Y↑Y↑Y↑Y↑Y REMEMBER ↑Y↑Y↑Y↑Y↑Y PARAMETER OFFSET=',I2)   
     
1       CALL SCANR  
        IOLDPR=VX1  
C SAVE PARAM NUM. FOR POSSIBLE 'CONTINUATION'.  BEWARE OF >P30!!!!    
        LPAR=IOLDPR 
C*******        IF(LPAR.GT.30)GO TO 201 
        IF(LPAR.GT.NUMP)GO TO 201  
        LPAR=LPAR+IOFSET 
        IF(LPAR.GT.NUMP)CALL ERR(6)
C*******        IF(LPAR.GT.30)CALL ERR(6)    
201     IJ=LPAR
        IF(IJ.GT.NUMP+2)CALL ERR(6)
C************** IF(IJ.GT.32)CALL ERR(6) 
CATCHES PARAM. OUT OF RANGE.  
        IF(QX.GE.0)GO TO 5703 
        IJ=LPAR+4   
C  SETS UP PARAM FOR QUAD CALL
        V(I)=IJ+INSNUM*10000  
        V(I+1)=2*ALL
C  TEST "ALL" FEATURE HERE!!!!!!!  
C  X=-13(DEGREES),=-14(X,Y),=-15(CIRCLE FUNCTS),=-16(LINE FUNCTS)
        V(I+2)=QX   
        I=I+3  
        QX=0.  
5703    IAMP=0 
        IF(IJ.LE.NP(INSNUM))GO TO 897   
        IF(IJ.LE.NUMP)NP(INSNUM)=IJ
C*******        IF(IJ.LT.31)NP(INSNUM)=IJ    
CC897   IF(LPAR.EQ.NUMP+2)LPAR=1   
897     V(I)=LPAR+INSNUM*10000
C  +1=WDCNT, +2=CODE, +3='NM' CCCCC
        IJ=I+1 
        I=I+4  
        ITMP=0 
        CODE=0 
        NFLG=1 
        ML=IZ+M
C   RE=REP  R=RHY  L=LIT  M=MOVE  MX=MOVX  N=NOTES  NU=NUM  
C   S--L=SUBL  S--N=SUBN  T=TAP  RT=RTAP  RL=RLIST  RN=RNOTES    
C  QU=QUADC  QUX=QUADX   
5702    ML=ML+1
CC      IF(ML.GT.72)GO TO 99  
        N=INP(ML)   
        IF(N.EQ.IBLA)GO TO 5702    
        IF(N.EQ.',')GO TO 5702
        NL=INP(ML+1)
        JA=-1  
        ISUB=0 
        IF(N.EQ.IXX)GO TO 2703
        IF(N.EQ.'R')GO TO 6702
        IF(N.EQ.IF)GO TO 8702 
        IF(N.EQ.IPP)GO TO 7006
        IF(N.EQ.ID)GO TO 3702 
        IF(N.NE.'C')GO TO 4005
        IF(NL.EQ.'U')GO TO 7006    
C  FOR 'CUTOFF'
4005    JA=0   
        IF(N.EQ.IEN)GO TO 6005
        IF(N.EQ.'M')GO TO 703 
        IF(N.EQ.'L')GO TO 2720
        IF(N.EQ.ISS)GO TO 6703
        IF(N.EQ.ITT)GO TO 4018
        IF(N.EQ.IQT)GO TO 5720
        IF(N.EQ.ISEMI)GO TO 2018   
C 7/75  IF(N.EQ.IPP)JA=-1
C  FOR ;P5  P3;
7006    CALL SCANR  
        IF(ISUB.EQ.8)GO TO 8  
        I=I+JJ 
        V(IJ+1)=NNUM+SUB 
        IF(JJ.EQ.1)GO TO 4006 
C  IF NNUM IS '-2' THEN NOTES ARE PRINTED    
        IF(NNUM.NE.-2)GO TO 5006   
        IX=IJ+3
        DO 2006 K=2,JJ,3 
2006  CALL RANR(VX,K)    
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
5006    IX=IJ+2
        DO 6006 K=1,JJ   
6006    V(IX+K)=VX(K)    
        IF(NL.EQ.'U')GO TO 8006    
C  JUMP FOR 'CUTOFF'
        IF(MOD(JJ,3).NE.0)CALL ERR(12)  
        V(IX+JJ-2)=1.    
C  ABOVE ENSURES THAT LAST RAND. UNIT REACHES 100% - 5/74 *********   
        GO TO 3013  
CCCC NOW DONE IN 'SCANR' 7/78   4006    IF(JA)VX1=-VX1/100.-9999.
C  CHANGES ;P5 P3; TO ;P5 -9999.03; ***** CHECK OUT ON OTHER MACHINES!
CIRC4006        IF(JA)VX1=VX1/100.+9999.
CIRC  CHANGES ;P5 P3; TO ;P5 9999.03; ***** CHECK OUT ON OTHER MACHINES!   
4006    V(I-1)=VX1  
        GO TO 3013  
8006    V(IJ+1)=-19 
C  FOR 'CUTOFF N1, N2' -- TO END RAND TIMES TOGETHER.  
        GO TO 3013  
6702    IF(NL.EQ.IE)GO TO 2703
C   JUMP IF "REP"   
        IF(NL.EQ.ITT)GO TO 4018    
C   JUMP IF "RTAP"  
        IF(NL.EQ.'R')GO TO 702
C RR=RAN. RESTS
        IF(NL.EQ.ID)GO TO 1702
C RD=RAN. DEV. OF P1
        CODE=-22    
        IF(NL.EQ.'L')CODE=-46.0    
C   JUMP IF "RLIST" (LIST OF RAND SELECTIONS)
        IF(NL.NE.IEN)GO TO 1016    
C   JUMP IF NOT "RNOTES" 
        JA=0   
C   FOR SCANR  
        CODE=-36.   
        GO TO 1016  
702     K=1    
C PARAM CODE FOR RAN. RESTS  (USES SLOT FOR P1)   
        GO TO 2702  
1702    K=NUMP+1    
C PARAM CODE FOR RAN. DEV. (P100 IN BIG VERSION)  
        GO TO 2702  
3702    IF(NL.NE.IF)GO TO 4005
        K=NUMP+2    
C PARAM CODE FOR DUTY FAC.  (P101 IN BIG VERSION) 
2702    V(I+1)=V(I-4)    
C  SHIFT STUFF AROUND    
        V(I-4)=INSNUM*10000+K 
        V(I-3)=4.   
        V(I-2)=-1.  
        V(I-1)=1.   
        V(I)=-9999.0-LPAR/100.0    
        I=I+5  
        IJ=IJ+5
        ML=ML+1
        GO TO 5702  
6005    CODE=-33    
        IF(NL.EQ.'A')GO TO 2721    
C  NUMS, NOTES, NAMES.   
        IF(NL.NE.'U')GO TO 1016    
        CODE=-44.   
C CODE NUM FOR NUM=-44   
1610    JA=-1  
        GO TO 1016  
8702    CODE=-35    
        IF(NL.EQ.'U')GO TO 1016    
        ML=ML+1
        CALL SCANR  
7       V(IJ+1)=CODE+SUB 
        V(IJ+2)=1.  
        IF(VX1.GT.99)CALL ERR(4)   
C TRAPS F NUMS >99. 
        V(I)=VX1+200.    
CC      IF(VX1.GT.15)CALL ERR(4)   
C TRAPS F NUMS >15. 
CC      V(I)=VX1+85.
        GO TO 7703  
C********  MOVE IS NEXT ***********
703     BW=V(IJ-2)  
        IC=0   
CC      DO 7031 K=ML+1,72
        DO 7031 K=ML+1,LEND   
        LP=INP(K)   
        IF(LP.EQ.KSLA)GO TO 8031   
CC      IF(INP(K).EQ.ISEMI)GO TO 8031   
        IF(LP.EQ.IPP)IC=1
C 'MOVP' P7 MOVP/10 3,4.9 5,5.9;MOVES FROM RAN SEL. OF P3,P4 TO P5,P5.
7031    IF(LP.EQ.IXX)IC=-1    
C   IC=-1 IS FOR MOVX, IC=0 FOR MOVE, IC=1 FOR MOVP.   
8031    I=I-1  
        V(I)=0 
        X=-9900.-BY 
        IF(BY.EQ.0)X=-9900.-BG(INSNUM)  
        IF(BW.EQ.X)GO TO 8005 
        IF(BW.NE.-9900.-BY)GO TO 1102   
        V(IJ-2)=X   
        GO TO 8005  
1102    V(IJ)=V(IJ-1)    
        V(IJ-1)=X   
        IJ=IJ+1
        I=I+1  
8005    LP=IJ-1
        BW=-9900.-X 
        ISUB=2 
        IZ=-1  
C  ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
4703    GO TO 1299  
102     IF(IZ.LT.0)GO TO 2102 
C  SKIPS NEXT FIRST TIME 
        BW=V(ICT)+BW
        V(I)=-9900.-BW   
        V(I+1)=V(LP)
        V(I+2)=(JJ+2)*ALL
        V(I+3)=CODE+SUB  
        I=I+4  
        IZ=1   
2102    IF(BW.LT.10000.)CALL BGSORT(BW) 
C   ROUND-OFF NONSENSE   
2       VX3=-9900.  
        VX2=VX3
        CALL SCANR  
        IF(JJ.GT.0)GO TO 5102 
        JJ=ILIT
C SLASH WILL REPEAT MOVE INPUT -- 6/74  
        DO 6102 K=1,JJ   
6102    VX(K)=VX(K+20)   
        GO TO 5005  
C::::::::::::::: PUT THIS, AND AT 5505, IN SCOR5 ALSO ::::::::::::::  
5102    IF(JJ.EQ.4)CALL ERR(9)
C  ERROR -- 4 ITEMS IN MOVE IMPOSSIBLE  
        IF(CODE.EQ.0)GO TO 7102    
        IF(JJ.GT.4.AND.CODE.GT.-57.)CALL ERR(9)   
C CAN'T MIX UP GROUPS OF 3 (STRAIGHT LINE) AND 5 (RANDOM RANGES) 
7102    IF(VX3.NE.-9900.)GO TO 3102
        IF(VX2.NE.-9900.)GO TO 4102
        VX2=VX1
        VX1=10000.  
4102    VX3=VX2
        JJ=3   
C  1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.    
3102    IF(IZ.GE.0)GO TO 3006 
        V(IJ)=(JJ+2)*ALL 
C  WORD COUNT  
        CODE=-55.   
        IF(JJ.NE.3)CODE=-57.  
        IF(NFLG)CODE=CODE-1.  
        IF(IC)CODE=-59.  
C  CODE=-56 OR -58 FOR NOTES. 
        V(IJ+1)=CODE+SUB 
        IZ=0   
3006    IF(NFLG.EQ.1)GO TO 5005    
        CALL RANR(VX,2)  
      IF(JJ.NE.3)CALL RANR(VX,4)   
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
5005    IF(IC.LE.0)GO TO 3003 
C NEXT FOR 'MOVP',  MOVE FROM PARAM TO PARAM.
        DO 1003 K=2,JJ   
1003    VX(K)=-VX(K)/100.0-19999.0 
CIRC1003        VX(K)=VX(K)/100.0+9999.0
C  CHANGES PARAM NUMS TO MAGIC NUMS.    
3003    ICT=I  
        ILIT=JJ
C  SAVES FOR SLASH REPEAT FEATURE  
        IJ=IJ+1
        DO 1006 K=1,JJ   
        VX(20+K)=VX(K)   
C  SAVES FOR SLASH REPEAT FEATURE  
1006    V(IJ+K)=VX(K)    
        I=I+JJ 
        IJ=I+2 
        IF(IAMP.EQ.0)GO TO 1299    
C*************** MAY 18,71 ***** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
        V(I)=-9900.-BY   
        GO TO 8703  
     
7703    V(IJ)=4.*ALL
8703    I=I+1  
        GO TO 4773  
C   FOR SUBROUTINES, -12=NUMS.  -11=LETTERS. 
6703    CODE=-12.   
        IF(INP(ML+3).EQ.'L')CODE=-11.   
        V(IJ)=2.*ALL
        V(IJ+1)=CODE+SUB 
        I=I-1  
        GO TO 4773  
4018    CNT(INSNUM)=-9900.-BY 
        P(INSNUM)=V(I-4) 
CC 6/74 COLGATE         JREAD=3    
CC 6/74 COLGATE GO TO 4400    
1444    IF(READER(JNP))CALL RUNIT  
C  READS A LINE.  IF END OF FILE, JUMPS.
CC443   IF(IFI)REREAD 107,K,IPT(INSNUM,1)    
CC      IF(IFI.GE.0)REREAD 8001,IPT(INSNUM,1)
443     IF(LN.NE.0)REREAD 107,K,IPT(INSNUM,1)
        IF(LN.EQ.0)REREAD 8001,IPT(INSNUM,1) 
C   NAME OF RHYTHM FILE. (ONLY ONE PER INST.)  READS DATA JUST BEFORE RUN  
        IF(J.EQ.'CONDU')GO TO 444  
        IF(NL.NE.ITT)GO TO 2338    
        CODE=-23.   
        GO  TO 1016 
2338    I=I-4  
        GO TO 4773  
3018    CNT(KZY)=-9900.  
        INSNUM=KZY  
C TO PUT 'CONDUCT' FILE NAME IN LAST SLOT (KZY) AT 443 
        GO TO 1444  
444     P(KZY)=980000.   
        GO TO 2308  
C   CAN'T USE 'TAP' OR 'RTAP' WITH INST KZY IF USING 'CONDUCT'.  
C  'REP'  
2703    ML=ML+1
        VX1=0  
        VX2=0  
        VX3=0  
        IF(N.EQ.IXX)GO TO 2704
        INP(ML)=IBLA
        INP(ML+1)=IBLA   
C  WIPES OUT 'EP' IN 'REP'    
2704    CALL SCANR  
        V(IJ)=3.    
        V(IJ+1)=-66.0    
        IF(VX1.EQ.32.)VX1=1.  
        IF(VX1.EQ.0)VX1=LPAR  
        IF(VX2.EQ.0)VX2=INSNUM-1   
        V(IJ+2)=VX1+VX2*10000.
        KL=VX2 
        IF(DUR(INSNUM).LT.0)DUR(INSNUM)=DUR(KL)   
        IF(VX3.EQ.0)GO TO 4773
        L=VX3  
        ML=INSNUM+1 
        DO 1018 KL=ML,L  
        IF(LPAR.LE.NP(KL))GO TO 997
        IF(LPAR.LT.31)NP(KL)=LPAR  
997     IF(DUR(KL))DUR(KL)=DUR(INSNUM)  
C  TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'  
        V(I)=V(I-4)+10000.    
        V(I+1)=3.   
        V(I+2)=-66. 
        V(I+3)=V(I-1)    
1018    I=I+4  
        GO TO 4773  
     
2018    IF(SUB.EQ.0)GO TO 20181    
C NEXT FOR Pn SUBR/ I.E. NOTHING BUT P AND SUB CALL. 7/73   
        V(IJ+1)=-201.    
        V(IJ+2)=1.  
        V(IJ+3)=0   
        GO TO 7703  
20181   V(IJ)=3.    
        V(IJ+1)=-66.
        V(IJ+2)=NW+INSNUM*10000    
        GO TO 4773  
C  READS /P5  .3 "ABC" .7 "XYZ"/   
     
8       IF(MOD(JJ,2).NE.0)CALL ERR(12)  
        IF(LPAR.EQ.2)CALL ERR(13)  
        V(IJ+1)=-77.+SUB 
C  SUB HAS SUBR CALL INFO
        I=I+1  
        VX(JJ-1)=1  
C  FOR RAND. SINGLE LITS.
        DO 3722 K=1,JJ,2 
        V(I)=VX(K)  
3722    I=I+1  
        V(IJ+2)=JJ/2
        V(IJ+3)=I   
        DO 4722 K=2,JJ,2 
        KN=I   
        I=I+1  
        L=VX(K)
        DO 6722 KL=L,LEND
        IF(INP(KL).EQ.IQT)GO TO 4722    
        IV(I)=INP(KL)    
6722    I=I+1  
4722    V(KN)=I-KN-1
        V(IJ)=(I-IJ)*ALL 
        GO TO 4773  
2720    QTS=0  
2721    ISUB=104    
        IF(NL.EQ.'A')ISUB=ISUB+1   
        GO TO 1299  
     
104     IF(ISUB.EQ.104)GO TO 1041  
C NEXT FOR INST NAME CHANGES.  Pn NAMES/N;   
C  V LIST= n000n/WDCNT/-89/NUM OF DUPLS/INST NAME/NUM OF LETTERS IN NAME/  
C  *********** NO 'ALL' OR 'DUPL' FEATURES WITH NAMES **************  
        V(IJ)=5
        V(IJ+1)=-89 
        CALL SCANR  
        V(I-1)=VX1  
        IV(I)=INST(INSNUM)    
CXX     IV(I+1)=2**(1+(7-LETRS)*7) 
        I=I+2  
        GO TO 4773  
1041    KL=0   
        CODE=-88.   
        DO 6721 K=ML,LEND
        L=INP(K)    
        IF(L.EQ.IBLA)GO TO 6721    
        JC=K+1 
        IF(L.EQ.IQT)GO TO 7721
        IF(L.EQ.KSLA)GO TO 7232    
        IF(L.EQ.ISEMI)GO TO 7232   
        IF(L.NE.IF)GO TO 1040 
        IF(INP(K+1).NE.'I')GO TO 1040   
        IF(INP(K+2).NE.IEN)GO TO 1040   
        IF(INP(K+3).NE.IE)GO TO 1040    
C FINDS THE WORD "FINE". 
        V(I)=-10000.
        IF(DUR(INSNUM))DUR(INSNUM)=10000
        GO TO 1042  
1040    IF(L.EQ.'%')INP(K)=KSLA    
        IF(L.EQ.'?')INP(K)=ISEMI   
        IF(L.EQ.'!')INP(K)=','
        IF(L.EQ.'#')INP(K)='<'
        IF(L.EQ.'&')INP(K)='"'
C  THE ABOVE ARE ALL SPECIAL CHAR'S TO AVOID VARIOUS CONFUSIONS. 
        IF(KL.EQ.0)KL=K  
6721    CONTINUE    
C  FOR REPEAT OF ITEM BY SLASH
C  KL IS START OF QUOTE, THEN K IS END -- WHEN NO "S ARE USED.   
7232    IF(KL.EQ.0)GO TO 7233 
        JC=KL  
        ML=K+1 
        JD=K-1 
        NLIT=K-KL   
        GO TO 8721  
     
7233    DO 7230 KL=ILIT,ILIT+NLIT  
        V(I)=V(KL)  
7230    I=I+1  
        GO TO 27222 
7231    CONTINUE    
     
5720    IAMP=-1
        JC=ML+1
C  FOR SINGLE 'LIT' ITEMS.    
7721    DO 1722 KL=JC+1,LEND  
        IF(INP(KL).NE.IQT)GO TO 1722    
        JD=KL-1
        ML=KL+1
        NLIT=KL-JC  
C   EXTENT OF LIT ITEM IS FOUND    
        GO TO 8721  
1722    CONTINUE    
C  CAN'T USE SLASH FOR REPEAT AFTER @Q  
8721    V(I)=NLIT   
        ILIT=I 
        DO 9721 K=JC,JD  
C   PUTS ITEM IN "IV" ARRAY   
        I=I+1  
9721    IV(I)=INP(K)
        I=I+1  
27222   IF(IAMP.EQ.0)GO TO 1299    
2722    V(I)=999.   
1042    QTS=-1.
        CODE=-88.   
C 105, -89. FOR LIST OF NAMES FOR INST. NAME CHNGS.    
        IF(LPAR.EQ.2)CALL ERR(13)  
C NO 'LIT' WITH P2!!
        V(IJ+1)=CODE+SUB 
        V(IJ)=(I-IJ+1)*ALL    
        IJ=IJ+2
        V(IJ)=IJ+1  
        I=I+1  
        ISUB=1 
        GO TO 1299  
     
7720    V(I)=INSNUM 
        V(I+1)=3.   
        V(I+2)=-67. 
        ML=ML+4
        IF(JRSTA.EQ.0)CALL SCANR   
        IF(VX1.EQ.0)VX1=INSNUM-1   
C DUPL 0; = DUPL PREV. INST. NUM   
        V(I+3)=VX1  
        I=I+4  
        L=VX1  
        NUMPAR(INSNUM)=NUMPAR(L)   
C DUPLICATES NUM. OF PARAMS TO PRINT.   
        IF(NP(INSNUM).LT.NP(L))NP(INSNUM)=NP(L)   
        IF(JRSTA.NE.0)GO TO 2173   
C GO BACK IF THIS WAS AN AUTOMATIC 'DUPL' WITH A 'RESTART' (DUR IS DIFFERENT)   
        IF(DUR(INSNUM).LT.0)DUR(INSNUM)=DUR(L)    
        GO TO 4773  
C   TYPE 'DUPL N;'   N=INST # TO BE DUPLICATED.   
142     FORMAT(I,15A5)   
1301    FORMAT(15A5)
1302    FORMAT(1X15A5)   
300     FORMAT(I,3F,A1)  
301     FORMAT(3F,A1)    
6       IF(J.NE.'PRECE')GO TO 1341 
C  'PRECEDE' WRITES LINES DIRECTLY ON DSK, BEFORE THE WORD 'PLAY;'.   
C  NO LIMIT TO THE NUMBER OF LINES.  LAST LINE (NOT PRINTED) MUST
C  BEGIN WITH *.     KNP ARRAY (15) IS EQUIV. TO INP . 
4341    IF(ITYP)GO TO 5341    
        TYPE TPALN  
        ACCEPT 1301,KNP  
        CALL SHORT(KNP,K)
        WRITE(21,1301)(KNP(JD),JD=1,K)  
        GO TO 6341  
5341    IF(LN.EQ.0)GO TO 2341 
        READ(23,142,END=7341)K,KNP 
        GO TO 3341  
7341    CALL ERR(10)
C   GO TO ERROR ROUTINE IF MISSING "*". 
        STOP   
2341    READ(23,1301,END=7341)KNP  
3341    CALL SHORT(KNP,K)
C  DON'T TYPE TRAILING BLANKS 
        IF(MX.EQ.22)GO TO 6341
        IF(SOS)WRITE(JOUT,1302)(KNP(JD),JD=1,K)   
6341    IF(MX.EQ.22)WRITE(JOUT,1302)(KNP(JD),JD=1,K)   
        IF(MX.EQ.7)WRITE(21)K,(KNP(JD),JD=1,K)    
        IF(KNP(1).NE.'*')GO TO 8341
C***************        MX='*'
        GO TO 2308  
8341    IF(MX)WRITE(1,1301)(KNP(JD),JD=1,K)  
        GO TO 4341  
1341    KB=KB+1
        IF(JED.GT.0)JED=0
        IF(J.EQ.'INSER')GO TO 1340 
        OTH(KB,1)=VX1*100000.+VX2*100.+VX3   
        GO TO 340   
1340    X=VX1  
        IF(VX2.NE.0)X=1000000.+VX1*100000.+VX2    
        OTH(KB,1)=X 
        GO TO 1338  
C   ABOVE IS TO PUT INSERT AFTER NOTE # OF A PARTICULAR
C   INSTRUMENT.  FOR COMMENT AT START, SET BG TIME TO 1,1   
C   - BEGIN LINE WITH  <,END WITH ;
C   UP TO 75 CHARACTERS MAY BE TYPED.   
340      IF(VX3.NE.2)GO TO 1338    
        IF(ITYP.GE.0)GO TO 449
        IF(READER(JNP))CALL RUNIT  
C  READS A LINE.  IF END OF FILE, JUMPS.
445     OTH(KB,3)=1.
        IF(LN.EQ.0)GO TO 447  
        REREAD 300,K,OTH(KB,2)
        GO TO 1447  
447     REREAD 301,OTH(KB,2)  
1447    IF(JED)GO TO 2308
3445    TYPE TEDIT  
        ACCEPT 77732,K   
        CALL LO2UP(K)    
        IF(K.EQ.IG)JED=-1
        IF(J.EQ.'INSER')GO TO 3446 
        IF(K.NE.'Y')GO TO 2308
        IF(JED)GO TO 2308
449     TYPE TPALN  
  AD 1301,(OTH(KB,JD),JD=2,16)
1446    IF(JED)2446,3445,2446 
3446    IF(K.NE.'Y')GO TO 2446
        IF(JED)GO TO 2446
1449    TYPE TPALN  
        ACCEPT 1301,(OTH(KB,JD),JD=2,16)
        IF(JED)WRITE(21,1301)(OTH(KB,JD),JD=2,16) 
2446    X=OTH(KB,2) 
        IF(J.NE.'INSER')GO TO 971  
        IF(VX3.EQ.0)GO TO 971 
        IF(X.NE.'*')GO TO 6   
971     IF(X.EQ.'*')KB=KB-1   
C   ALLOWS SEVERAL LINES OF 'INSERT' IF ANY 3RD #.
C   LAST LINE HAS '*' IN COLUMN 1. 
        GO TO 2308  
C   IF NO PARAM NUM IS GIVEN, ALL PARAMS MUST BE TYPED.
C   INSERT MAY INCLUDE 10 CHARS(P3-P30),
C   P2, A # ONLY.  IF MORE THAN 1 PARAM IS TO BE EDITED AND 
C   P2 IS ONE OF THEM, FIRST EDIT P2 TO DESIRED VALUE, 
C   CHANGE P2 TO MINUS = THEN INSERT ENTIRE NOTE TO PLAY    
C   JUST AFTER ORIGINAL NOTE(WHICH WILL BE A REST).    
C   BX=INST N. Y=NOTE N. Z=PARAM N.